{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e8536916",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8d18f9be",
   "metadata": {},
   "outputs": [],
   "source": [
    "# loading\n",
    "train = pd.read_csv('./data/train.csv')\n",
    "test = pd.read_csv('./data/test.csv')\n",
    "ad = pd.read_csv('./data/ad.csv')\n",
    "\n",
    "# 合并 ad\n",
    "train = pd.merge(train,ad,on='creativeID')\n",
    "test = pd.merge(test,ad,on='creativeID')\n",
    "\n",
    "# 合并 app cat\n",
    "categories = pd.read_csv('./data/app_categories.csv')\n",
    "train = pd.merge(train,categories,on='appID')\n",
    "test = pd.merge(test,categories,on='appID')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "fa94fdf9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>clickTime</th>\n",
       "      <th>conversionTime</th>\n",
       "      <th>creativeID</th>\n",
       "      <th>userID</th>\n",
       "      <th>positionID</th>\n",
       "      <th>connectionType</th>\n",
       "      <th>telecomsOperator</th>\n",
       "      <th>adID</th>\n",
       "      <th>camgaignID</th>\n",
       "      <th>advertiserID</th>\n",
       "      <th>appID</th>\n",
       "      <th>appPlatform</th>\n",
       "      <th>appCategory</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3089</td>\n",
       "      <td>2798058</td>\n",
       "      <td>293</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1321</td>\n",
       "      <td>83</td>\n",
       "      <td>10</td>\n",
       "      <td>434</td>\n",
       "      <td>1</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1259</td>\n",
       "      <td>463234</td>\n",
       "      <td>6161</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1535</td>\n",
       "      <td>685</td>\n",
       "      <td>80</td>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4465</td>\n",
       "      <td>1857485</td>\n",
       "      <td>7434</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>147</td>\n",
       "      <td>460</td>\n",
       "      <td>3</td>\n",
       "      <td>465</td>\n",
       "      <td>1</td>\n",
       "      <td>209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1004</td>\n",
       "      <td>2038823</td>\n",
       "      <td>977</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>411</td>\n",
       "      <td>564</td>\n",
       "      <td>3</td>\n",
       "      <td>465</td>\n",
       "      <td>1</td>\n",
       "      <td>209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1887</td>\n",
       "      <td>2015141</td>\n",
       "      <td>3688</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>369</td>\n",
       "      <td>144</td>\n",
       "      <td>84</td>\n",
       "      <td>360</td>\n",
       "      <td>1</td>\n",
       "      <td>201</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   label  clickTime  conversionTime  creativeID   userID  positionID  \\\n",
       "0      0     170000             NaN        3089  2798058         293   \n",
       "1      0     170000             NaN        1259   463234        6161   \n",
       "2      0     170000             NaN        4465  1857485        7434   \n",
       "3      0     170000             NaN        1004  2038823         977   \n",
       "4      0     170000             NaN        1887  2015141        3688   \n",
       "\n",
       "   connectionType  telecomsOperator  adID  camgaignID  advertiserID  appID  \\\n",
       "0               1                 1  1321          83            10    434   \n",
       "1               1                 2  1535         685            80     14   \n",
       "2               4                 1   147         460             3    465   \n",
       "3               1                 1   411         564             3    465   \n",
       "4               1                 1   369         144            84    360   \n",
       "\n",
       "   appPlatform  appCategory  \n",
       "0            1          108  \n",
       "1            2            2  \n",
       "2            1          209  \n",
       "3            1          209  \n",
       "4            1          201  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "fb3d6738",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 时间预处理-天\n",
    "def get_day(arg):\n",
    "    return int(str(arg)[:2])\n",
    "\n",
    "train['click_date'] = train['clickTime'].apply(get_day)\n",
    "test['click_date'] = test['clickTime'].apply(get_day)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4281b82",
   "metadata": {},
   "source": [
    "- 每日点击人次"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1f12ddbd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='click_date'>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "click_date_count = train['click_date'].value_counts().sort_index()\n",
    "sns.barplot(x=click_date_count.index,y=click_date_count.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec34806b",
   "metadata": {},
   "source": [
    "- 每日广告转化人次"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f2073a94",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='click_date'>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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559/vt384MGD5pprrolKls8WuFOnTplXXnnF3HzzzWbgwIHme9/7nikrKzMffvhhVLIYY0y/fv1MQ0ODMcaY48ePm5iYGHPixInwfNWqVcbr9UYlS1JSkjlw4EC7bVlZWWbOnDlm8ODB5hvf+IZ5//33o5LFGDueh3tlSbHlAcKDo2N+v988/PDD5uTJkxecr1y50sTHx5tDhw5d9ixHjhwxEyZMMD/5yU8u+31dzMiRI80vf/nL87Zv3LjRDB482MyePTsqJeXo0aMmKSmp3anez/+29fLLL5uxY8de9iyfd+zYMVNQUGBGjBhh1q9fb4yJfklxuVxmw4YN5sSJE2b06NHnPXbeffdd4/P5opbHGGM++OADM3HiRNOvXz9z0003mePHj4dnS5cuNRMnToxKjpiYmPBz8GfV1dWZoqIik52dbeLi4qKSxRhjhg8fHi7X27dvNy6Xy1RWVobnL774oklLS4tKlnHjxplNmza12zZ+/HizZ88e09raaoqLi82gQYOiksUYO56He11JsekBwoOjYx988IFJS0szAwcONFOmTDGPPvqomT9/vpk5c6a57rrrzJAhQ8zatWujlqexsdHk5OT0+OuZ1q5da3w+n1m6dOl5sz179pjrr78+amd1Xn31VZOcnGxWrVp13iwQCJiEhASzcePGqGS5kM2bN5svf/nL5s/+7M9M//79o1pSHn30UZOVlWUSEhJM//79zYQJE8KzNWvWmOuuu84UFhZGLc9nLV261AwePNj069fP/Mmf/InJysoySUlJZtu2bVG5/8/+otiRjn4oXg7l5eVm+PDhZtq0aWbQoEFmzpw5ZtiwYeb73/+++e53v2vi4+PNc889F5Usr7zyiunfv7+ZN2+eWbx4sbnjjjvMrbfe2m6fz5bLy+1iz8ODBw++7M/Dve5t8WNiYnT8+PEv/IjpU6dOKS4u7rJnWblypRYuXKgJEyZo8+bN+tM//VOtW7dO06dP18cff6zXX39dCxYs0NNPP33Zs/zzP/+zHn/8cT300EMaPny4fv3rX+v06dPaunVreB/HcTr10drd5fTp01q/fr2qqqoUDAbl8Xjk8/nk9/t122236dChQxo+fHjU8nyRAwcORC3L3r17tWvXLk2ePPm82alTp1RaWqrHHnssKlkcx1FLS4tSUlLabX/nnXf0la98RWfPnu3R/0ehUEjPPfecXn31VW3dulVtbW1RzdPW1qadO3eqtrZW+fn5kqT58+frq1/9qm6//fYe+96cOHFC//qv/6qPPvpIqampmjx5slpaWqKSZ8WKFZoxY4Y8no4/Oi6ajyfpk8fUjh07NHbsWI0ZM0YVFRVas2aNzp49q6ysLE2YMEEjRoyISpZNmzapvLxcR48e1Y033qj58+crKSkpPI/29+bzz8N9+vSRz+fTmDFjNHnyZLnd7ssb4LJWIAuVlZWZM2fO9HSMsD179phf/vKX4dPm//Vf/2WeeOIJM3fuXLN69eqoZnnrrbfMzJkzzeTJk83f/u3fmmPHjkX1/j/r81ex/OxnP+uxq1h27dplJk6caMUVNTZd3WNTFtvy2PTv90J5evJ7U1tba83jyRi7vjefPtd4vV4r/t289tprJi0tzSQmJpqCgoIeuYKv15UUXBlsuYqFLFdGFtvy2JTFtjw2ZbEtz2ezvPTSSz2apTNX8M2cOfOyX8HX60qKTZeTkqVjtlzFQpYrI4tteWzKYlsem7LYlsemLLZcwdfrSopNl5OSpWO2XMVClisji215bMpiWx6bstiWx6YstlzB1+tKik2Xk5KlYzZdxUIW+7PYlsemLLblsSmLbXlsymKMHVfw9bqSYswnP5BtuJyULF9sz549Zt26dRecnTx5MqqXIJPF/iy25bEpi215bMpiWx6bshjzySXPn76f12dt3rw5Ku9T1esuQQYAAFcGPgUZAABYiZICAACsREkBAABWoqQAAAArUVIAdEl9fb1cLleXZ92x/+U+DgC7UFIAdJvhw4erqampp2Nc1O23366ysrKejgHgIigpALpNTEyMBgwY0NMxAFwlKCkAzrN9+3ZNmDBB/fr108SJE/Xf//3fnbpdR3926czx2traNHXqVM2aNatT97Vu3TqNHj1aAwcOPO+syNatW3XjjTcqPj5efr9f1dXVkqQ5c+bI5XJpy5YtKigokMvl0pw5c8K3+/3vf69bbrlFiYmJuvfee+U4TqeyALg8KCkA2gkGg5o0aZLuvvtuffjhh8rMzNSMGTMu+/Hmzp2rtrY2LVu27KLH/PjjjzVt2jQtWLBA27Zt029+85vw7Ny5c7rvvvt0//33a+/evcrKylIgEJAkvfjii2pqatLEiRP105/+VE1NTXrxxRclScePH9e3vvUtTZkyRR988IFaW1s1f/78iL9uAJfO09MBANhl3bp18vl8KiwslCQtXLhQN99882U93j/+4z9qyZIlqq+vl8dz8aelDRs2aOTIkXrooYckSc8++6wmT54cnldVVSkxMVE7d+5Uc3Oz/ud//keS1LdvX/Xt21cej0fx8fHt/jS1bt069enTR08//bRcLpeeeOIJffe734346wZw6TiTAqCdgwcPKi0tLbyelJSkadOmXdbjLV26VA888IAWL17cqWMePnxYqamp4fWRI0eG/zsmJkYlJSVKSUnRI488Isdx1NbWdtFjfvTRR2psbFRSUpIGDBig+++/X42NjTp16lSnMgHofpxJAdBOamqq9u3bF15vaWlRZmam3n77bQ0dOrRbj/epDRs2KC4uTjfccIMef/zxdqXmQgYPHqxDhw6F1w8cOBD+7//4j//QkiVLtHv3bg0ZMkS/+c1v9P7777e7fUxMjD7/sWXDhg3T17/+da1evVqSZIyR4zjq06dPl79mAN2DMykA2pkyZYqamppUVFSkgwcP6vnnn1dbW5uGDBly2Y43evRoDRs2TLNmzdLChQsvesy77rpLH374oVasWKE9e/bomWeeCc9aWlokSY7j6Le//a3mzZt3XiEZPXq03n77bR0+fFhvv/222traNGXKFO3fv1/vvfee3G63Vq9erUmTJp13WwBRdNk/ZxnAFecPf/iDyczMNP369TPf+MY3TG1tbXi2b98+09FTR0ezjo73+f0PHz5s+vXrZ7Zv337RjK+//rpJT083Q4cONYFAIHycM2fOmPz8fHPNNdeYcePGmRdeeMF4PB7zv//7v+HbHjhwwEycONF4vV4zevRoc/r0aWOMMe+99565+eabTXx8vPH7/Wbbtm0X/2YBuGxcxvBrAgAAsA+vSQFgpY7eFO7LX/6y3nvvveiGAdAjKCkArLRjx44LbueFrEDvwZ97AACAlbi6BwAAWImSAgAArERJAQAAVqKkAAAAK1FSAACAlSgpAADASpQUAABgJUoKAACw0v8DZ3fl5Gl3cD4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "install_count = train[train['label']==1].click_date.value_counts().sort_index()\n",
    "install_count.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6067def1",
   "metadata": {},
   "source": [
    "- 每日转化率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "0351b077",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='click_date'>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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5X/84x/N6NGjzXe/+90BCTDHjx83cXFxXU4fn/9X2i9/+Utzww03XPZeznfixAmzcOFCc+2115qqqipjzMAHGJfLZV544QXz0UcfmZSUlG6vnVdffdV4vd4B68cYY3bv3m2mTp1qRowYYW666SZz8uTJ4Ni6devM1KlTB6SPsLCw4Pvwufbt22dWrFhhpk2bZiIjIwekl2uuuSYYut98803jcrlMbW1tcPyJJ54w48aNG5BejDFm0qRJ5uWXX+6yLD093bz33numo6PDlJaWmvj4+AHrJxTehwkwnwqlF44xofXiCbUXzu7du824cePM1VdfbXJzc839999vHnzwQbNgwQIzceJEM2bMGPO73/1uQHppaWkx2dnZIXH/1O9+9zvj9XrNunXruo299957JjU1dcDOCG3cuNGMGjXKPPvss93GioqKTExMjPnjH/84IL1cyCuvvGK++MUvmn/8x380I0eOHNAAc//995usrCwTExNjRo4caaZMmRIc+81vfmMmTpxoiouLB6yfc61bt86MHj3ajBgxwvzd3/2dycrKMnFxcWbHjh0Dsv9z/5DsSU//YF5qGzZsMNdcc42ZO3euiY+PN4sWLTJJSUnmoYceMt/61rdMVFSU+elPfzogvRhjzFNPPWVGjhxpHnjgAbNmzRpz2223mZtvvrnLOucGz8utr/fh0aNHX/b3Yb5K4FNhYWE6efJkr9+5dOrUKUVGRg5IP88884yWLVumKVOm6JVXXtE//MM/aMuWLbrrrrv0wQcf6Le//a2WLl2qkpKSy97Lr371K/3whz/Uvffeq2uuuUZ/+MMf9PHHH+u1114LruPz+Rx9/fml8vHHH6uqqkr19fXy+/1yu93yer3KyMjQLbfcoiNHjuiaa64ZsH56cvDgwQHt4/3339fbb7+tWbNmdRs7deqUysvL9YMf/GBAevH5fGpvb1diYmKX5dXV1fqbv/kbnTlzZlD/HwUCAf30pz/Vxo0b9dprr6mzs3NA++ns7NRbb72lPXv2aP78+ZKkBx98UF/60pd06623DtrP5qOPPtJ//dd/6fDhw0pOTtasWbPU3t4+IP08/fTT+uY3vym3u+ev6RvI19T777+vuro63XDDDbr++uu1fft2/eY3v9GZM2eUlZWlKVOm6Nprrx2QXiTp5Zdf1oYNG3T8+HF9+ctf1oMPPqi4uLjg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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "transform_rate = install_count/click_date_count\n",
    "transform_rate.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b4a73c5",
   "metadata": {},
   "source": [
    "- 每日点击用户人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "792259ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>clickTime</th>\n",
       "      <th>conversionTime</th>\n",
       "      <th>creativeID</th>\n",
       "      <th>userID</th>\n",
       "      <th>positionID</th>\n",
       "      <th>connectionType</th>\n",
       "      <th>telecomsOperator</th>\n",
       "      <th>adID</th>\n",
       "      <th>camgaignID</th>\n",
       "      <th>advertiserID</th>\n",
       "      <th>appID</th>\n",
       "      <th>appPlatform</th>\n",
       "      <th>appCategory</th>\n",
       "      <th>click_date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3089</td>\n",
       "      <td>2798058</td>\n",
       "      <td>293</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1321</td>\n",
       "      <td>83</td>\n",
       "      <td>10</td>\n",
       "      <td>434</td>\n",
       "      <td>1</td>\n",
       "      <td>108</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1259</td>\n",
       "      <td>463234</td>\n",
       "      <td>6161</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>1535</td>\n",
       "      <td>685</td>\n",
       "      <td>80</td>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4465</td>\n",
       "      <td>1857485</td>\n",
       "      <td>7434</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>147</td>\n",
       "      <td>460</td>\n",
       "      <td>3</td>\n",
       "      <td>465</td>\n",
       "      <td>1</td>\n",
       "      <td>209</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1004</td>\n",
       "      <td>2038823</td>\n",
       "      <td>977</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>411</td>\n",
       "      <td>564</td>\n",
       "      <td>3</td>\n",
       "      <td>465</td>\n",
       "      <td>1</td>\n",
       "      <td>209</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1887</td>\n",
       "      <td>2015141</td>\n",
       "      <td>3688</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>369</td>\n",
       "      <td>144</td>\n",
       "      <td>84</td>\n",
       "      <td>360</td>\n",
       "      <td>1</td>\n",
       "      <td>201</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   label  clickTime  conversionTime  creativeID   userID  positionID  \\\n",
       "0      0     170000             NaN        3089  2798058         293   \n",
       "1      0     170000             NaN        1259   463234        6161   \n",
       "2      0     170000             NaN        4465  1857485        7434   \n",
       "3      0     170000             NaN        1004  2038823         977   \n",
       "4      0     170000             NaN        1887  2015141        3688   \n",
       "\n",
       "   connectionType  telecomsOperator  adID  camgaignID  advertiserID  appID  \\\n",
       "0               1                 1  1321          83            10    434   \n",
       "1               1                 2  1535         685            80     14   \n",
       "2               4                 1   147         460             3    465   \n",
       "3               1                 1   411         564             3    465   \n",
       "4               1                 1   369         144            84    360   \n",
       "\n",
       "   appPlatform  appCategory  click_date  \n",
       "0            1          108          17  \n",
       "1            2            2          17  \n",
       "2            1          209          17  \n",
       "3            1          209          17  \n",
       "4            1          201          17  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "78ef7181",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='click_date'>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGvCAYAAACn9fQdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJ2ZJREFUeJzt3X9w0/d9x/GXbIGM45/iVxpjwOBSAiklcwXGNCbZWMb4MSBrE2ZaBm1+EycHmY940FvSZrZvy0hvS0dwQus4PaBc1jUd1OQXCaFbnMQUTFwZRgBjB1hqHCHZ/BBgPvuDiw4HHGwjyfKH5+NOd9H3I339lmPJT2R9JYcxxggAAMAScb09AAAAQDgRNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACs4uztAXrDhQsXdPToUSUnJ8vhcPT2OAAAoAuMMWptbdVNN92kuLjOn5+5LuPm6NGjyszM7O0xAABADzQ1NWnYsGGdrl+XcZOcnCzp4jcnJSWll6cBAABdEQgElJmZGfo93pkexU1LS4v27dunMWPGaNCgQT0asDd9/qeolJQU4gYAgD7mai8p6fYLijdu3Kjs7GwtXbpUw4cP18aNGyVJdXV18ng8Sk9PV1FRkS79PM5orwEAgOtXt+LmxIkTKiws1I4dO7Rr1y6tXbtWK1asUDAY1Jw5c5STk6Oamhp5vV5VVFRIUtTXAADAdc50Q2Njo/nFL34ROl9bW2uSk5PNf/7nf5r09HRz8uRJY4wxu3fvNlOnTjXGmKivdYXf7zeSjN/v787NBwAAvairv7+79cxNZmamFi5cKEk6d+6cnnnmGd11112qra1Vbm6uEhMTJUkTJkyQ1+uVpKivAQCA61uPXlBcW1urO+64Q/3799fevXv14x//WFlZWaF1h8Oh+Ph4+Xw+BQKBqK6lp6dfNm8wGFQwGAydDwQCPbnZAACgD+jROxRPmDBBb731lsaPH68lS5bI6XTK5XJ1uExCQoJOnToV9bUrKS0tVWpqaujEe9wAAGCvHsWNw+HQrbfeqoqKCr366qtyu91qbm7ucJnW1lb1798/6mtXUlxcLL/fHzo1NTX15GYDAIA+oFtxs23bNhUVFYXOO50X/6o1duxYVVdXh7Y3NDQoGAzK7XbL4/FEde1KXC5X6D1teG8bAADs1q24GTt2rNauXavy8nI1NTXpiSee0J133qlZs2bJ7/ersrJSklRWVqbp06crPj5e+fn5UV0DAADXue4ehrV161Zz8803m+TkZPPtb3/b/PGPfzTGXDw8e8CAAWbIkCFm4MCBpq6uLnSdaK9dDYeCAwDQ93T197fDmPC9te+RI0dUU1OjvLw8DR48uFfXvkwgEFBqaqr8fj9/ogIAoI/o6u/vsMZNX0HcAADQ93T193ePjpYCAACIVcQNAACwCnEDAACs0qOPXwAAAPjcyCe2hGU/DWWzwrIfnrkBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhQ/OBCwWjg+zC9cH2QFAtPDMDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqzh7ewDAJiOf2BKW/TSUzQrLfgDgesQzNwAAwCrEDQAAsAp/lgIAoA8Kx5/Bbf0TOM/cAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrcLQUACCEN6KEDXjmBgAAWIW4AQAAVuHPUgCAmMWfydATPHMDAACsQtwAAACrEDcAAMAqxA0AALBKt15Q/Oqrr2rZsmVqbGxUTk6OKioqdPPNN6uwsFDPPfdc6HKjR4/Wxx9/LEmqq6vTkiVL9PHHH+vee+/VP/3TP8nhcERsLZz4xFUAAPqeLj9zc+DAAS1ZskRlZWU6cuSIRowYoXvvvVeStHPnTm3ZskU+n08+n0+7du2SJAWDQc2ZM0c5OTmqqamR1+tVRUVFxNYAAAC6/MxNfX29SkpKdPfdd0uSHnroIc2YMUPnz59XXV2d8vPzlZSU1OE6VVVV8vv9Wr16tRITE1VSUqKlS5dqyZIlEVkDgK7imVnAXl2Om9mzZ3c4v2/fPmVnZ2vPnj0yxmjixIk6cuSIpk2bpvLycg0fPly1tbXKzc1VYmKiJGnChAnyer2SFJG1zgSDQQWDwdD5QCDQ1ZsNAAD6mB69id/Zs2f1zDPPaNmyZaqvr9f48eP1b//2bxo0aJAeffRRPfDAA6qqqlIgEFBWVlboeg6HQ/Hx8fL5fBFZS09Pv+K8paWleuqpp3pyUwGECW/GBiBaehQ3q1atUlJSku6//37169dPCxcuDK0999xzGjVqlAKBgJxOp1wuV4frJiQk6NSpUxFZ6yxuiouLtXz58tD5QCCgzMzMntx0AAAQ47p9KPgbb7yh559/XuvXr1e/fv0uW09LS9OFCxd07Ngxud1uNTc3d1hvbW1V//79I7LWGZfLpZSUlA4nAABgp27FzcGDB7Vw4UKtWbNG48aNkyQtX75cmzZtCl3mww8/VFxcnDIzM+XxeFRdXR1aa2hoUDAYlNvtjsgaAABAl+Pm9OnTmj17tubNm6e5c+eqra1NbW1t+sY3vqGVK1fq3Xff1bZt21RYWKjFixcrMTFR+fn58vv9qqyslCSVlZVp+vTpio+Pj8gaAABAl19z89prr6m+vl719fV64YUXQtsPHTqkvXv3au7cuUpOTtb8+fNVUlJycedOp8rLy1VQUKCioiK1t7dr+/btEVsDAADoctzMmzdPxpgrrpWWlqq0tLTT6+3fv181NTXKy8vT4MGDI7oGAACubz06Wqq7MjIylJGREbU1AABw/YpK3AAA0NfxXk19B58KDgAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKb+IHAL2MN4cDwotnbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYJVuxc2rr76qUaNGyel0avLkyaqvr5ck1dXVyePxKD09XUVFRTLGhK4T7TUAAHB963LcHDhwQEuWLFFZWZmOHDmiESNG6N5771UwGNScOXOUk5Ojmpoaeb1eVVRUSFLU1wAAALocN/X19SopKdHdd9+toUOH6qGHHlJNTY2qqqrk9/u1evVqjR49WiUlJVq3bp0kRX0NAADA2dULzp49u8P5ffv2KTs7W7W1tcrNzVViYqIkacKECfJ6vZIU9bXOBINBBYPB0PlAINDVmw0AAPqYHr2g+OzZs3rmmWf08MMPKxAIKCsrK7TmcDgUHx8vn88X9bXOlJaWKjU1NXTKzMzsyc0GAAB9QI/iZtWqVUpKStL9998vp9Mpl8vVYT0hIUGnTp2K+lpniouL5ff7Q6empqae3GwAANAHdDtu3njjDT3//PNav369+vXrJ7fbrebm5g6XaW1tVf/+/aO+1hmXy6WUlJQOJwAAYKduxc3Bgwe1cOFCrVmzRuPGjZMkeTweVVdXhy7T0NCgYDAot9sd9TUAAIAux83p06c1e/ZszZs3T3PnzlVbW5va2tp02223ye/3q7KyUpJUVlam6dOnKz4+Xvn5+VFdAwAA6PLRUq+99prq6+tVX1+vF154IbT90KFDKi8vV0FBgYqKitTe3q7t27df3LnTGdU1AACALsfNvHnzOn0n4JEjR2r//v2qqalRXl6eBg8e3OF60VwDAADXty7HzdVkZGQoIyMjJtYAAMD1iw/OBAAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAVgnbp4IDvWXkE1vCsp+Gsllh2Q8AoHfxzA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACs0u24aWlpUVZWlhoaGkLbCgsL5XA4Qqfs7OzQWl1dnTwej9LT01VUVCRjTETXAADA9a1bcXP8+HHNnj27Q9hI0s6dO7Vlyxb5fD75fD7t2rVLkhQMBjVnzhzl5OSopqZGXq9XFRUVEVsDAADoVtwsWLBACxYs6LDt/PnzqqurU35+vtLS0pSWlqbk5GRJUlVVlfx+v1avXq3Ro0erpKRE69ati9gaAABAt+KmvLxcjz32WIdte/bskTFGEydO1IABAzRjxgw1NjZKkmpra5Wbm6vExERJ0oQJE+T1eiO2BgAA0K24GTVq1GXb6uvrNX78eG3YsEFer1f9+vXTAw88IEkKBALKysoKXdbhcCg+Pl4+ny8ia50JBoMKBAIdTgAAwE7Oa93BwoULtXDhwtD55557TqNGjVIgEJDT6ZTL5epw+YSEBJ06dSoia+np6VecsbS0VE899dS13EwAANBHhP1Q8LS0NF24cEHHjh2T2+1Wc3Nzh/XW1lb1798/ImudKS4ult/vD52ampqu8VYCAIBYdc1xs3z5cm3atCl0/sMPP1RcXJwyMzPl8XhUXV0dWmtoaFAwGJTb7Y7IWmdcLpdSUlI6nAAAgJ2uOW4mTpyolStX6t1339W2bdtUWFioxYsXKzExUfn5+fL7/aqsrJQklZWVafr06YqPj4/IGgAAwDW/5mbRokWqr6/X3LlzlZycrPnz56ukpOTizp1OlZeXq6CgQEVFRWpvb9f27dsjtgYAANCjuPniOwKXlpaqtLT0ipedN2+e9u/fr5qaGuXl5Wnw4MERXQMAANe3a37mpisyMjKUkZERtTUAAHD9ikrc4NqNfGJLWPbTUDYrLPsBACBW8angAADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAq3Q7blpaWpSVlaWGhobQtrq6Onk8HqWnp6uoqEjGmF5bAwAA17duxc3x48c1e/bsDmETDAY1Z84c5eTkqKamRl6vVxUVFb2yBgAA0K24WbBggRYsWNBhW1VVlfx+v1avXq3Ro0erpKRE69at65U1AACAbsVNeXm5HnvssQ7bamtrlZubq8TEREnShAkT5PV6e2WtM8FgUIFAoMMJAADYqVtxM2rUqMu2BQIBZWVlhc47HA7Fx8fL5/NFfa0zpaWlSk1NDZ0yMzO7c7MBAEAfcs1HSzmdTrlcrg7bEhISdOrUqaivdaa4uFh+vz90ampq6slNBQAAfcA1x43b7VZzc3OHba2trerfv3/U1zrjcrmUkpLS4QQAAOx0zXHj8XhUXV0dOt/Q0KBgMCi32x31NQAAgGuOm/z8fPn9flVWVkqSysrKNH36dMXHx0d9DQAAwHnNO3A6VV5eroKCAhUVFam9vV3bt2/vlTUAAIAexc0X3xF43rx52r9/v2pqapSXl6fBgwf32hoAALi+XfMzN5/LyMhQRkZGTKwBAIDrV9jiBtePkU9sCct+GspmhWU/AABcik8FBwAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYBXiBgAAWIW4AQAAViFuAACAVYgbAABgFeIGAABYhbgBAABWIW4AAIBViBsAAGAV4gYAAFiFuAEAAFYhbgAAgFWIGwAAYJWwxU1hYaEcDkfolJ2dLUmqq6uTx+NRenq6ioqKZIwJXScSawAA4PoWtrjZuXOntmzZIp/PJ5/Pp127dikYDGrOnDnKyclRTU2NvF6vKioqJCkiawAAAGGJm/Pnz6uurk75+flKS0tTWlqakpOTVVVVJb/fr9WrV2v06NEqKSnRunXrJCkiawAAAGGJmz179sgYo4kTJ2rAgAGaMWOGGhsbVVtbq9zcXCUmJkqSJkyYIK/XK0kRWetMMBhUIBDocAIAAHYKS9zU19dr/Pjx2rBhg7xer/r166cHHnhAgUBAWVlZocs5HA7Fx8fL5/NFZK0zpaWlSk1NDZ0yMzPDcbMBAEAMCkvcLFy4UNXV1fJ4PMrKytJzzz2n119/XRcuXJDL5epw2YSEBJ06dUpOpzPsa50pLi6W3+8PnZqamq7xFgMAgFgVkUPB09LSdOHCBd14441qbm7usNba2qr+/fvL7XaHfa0zLpdLKSkpHU4AAMBOYYmb5cuXa9OmTaHzH374oeLi4vT1r39d1dXVoe0NDQ0KBoNyu93yeDxhXwMAAAhL3EycOFErV67Uu+++q23btqmwsFCLFy/WnXfeKb/fr8rKSklSWVmZpk+frvj4eOXn54d9DQAAwBmOnSxatEj19fWaO3eukpOTNX/+fJWUlMjpdKq8vFwFBQUqKipSe3u7tm/ffvELR2ANAAAgLHEjXTwiqbS09LLt8+bN0/79+1VTU6O8vDwNHjw4omsAAOD6Fra4+TIZGRnKyMiI2hoAALh+8cGZAADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACsQtwAAACrEDcAAMAqxA0AALAKcQMAAKxC3AAAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAq/TZuKmrq5PH41F6erqKiopkjOntkQAAQAzok3ETDAY1Z84c5eTkqKamRl6vVxUVFb09FgAAiAF9Mm6qqqrk9/u1evVqjR49WiUlJVq3bl1vjwUAAGJAn4yb2tpa5ebmKjExUZI0YcIEeb3eXp4KAADEAmdvD9ATgUBAWVlZofMOh0Px8fHy+XxKT0+/7PLBYFDBYDB03u/3h/bzZS4ET4Vl1nAIxyxSeOaJpVmk2JonlmaR+Bn+MnxvriyWZpFia55YmkW6Pn+GP1+/2utsHaYPvhJ3xYoVOnfunFavXh3alpmZqerqamVkZFx2+SeffFJPPfVUNEcEAAAR0tTUpGHDhnW63iefuXG73aqrq+uwrbW1Vf3797/i5YuLi7V8+fLQ+QsXLuizzz7TwIED5XA4ejRDIBBQZmammpqalJKS0qN9hFMszRNLs8TaPLE0S6zNwyx9Y55YmiXW5omlWWJtnnDNYoxRa2urbrrppi+9XJ+MG4/HoxdffDF0vqGhQcFgUG63+4qXd7lccrlcHbalpaWFZZaUlJRe/6G5VCzNE0uzSLE1TyzNIsXWPMzSuViaJ5ZmkWJrnliaRYqtecIxS2pq6lUv0ydfUJyfny+/36/KykpJUllZmaZPn674+PhengwAAPS2PvnMjdPpVHl5uQoKClRUVKT29nZt3769t8cCAAAxoE/GjSTNmzdP+/fvV01NjfLy8jR48OCofn2Xy6V/+Id/uOzPXb0lluaJpVmk2JonlmaRYmseZulcLM0TS7NIsTVPLM0ixdY80Z6lTx4tBQAA0Jk++ZobAACAzhA3AADAKsQNAACwCnEDAACsQtzAan6/X8eOHVNLS8tVP4vketfY2NirX9/v96u1tbVXZ/iiRx55RJ999lmvztDW1qb9+/frzJkzvTqHJJ09e1YvvviiVq5cqfLy8qj+zFRWVqqhoSFqX6+n9uzZo127dqm9vT3qX9vn88XcfUjqncdh4qaL+sIdizvVRS+99JJuu+02DRw4UGPGjNHkyZOVnZ2tpKQkzZ07V/X19b09YtTt27dPt912mwYMGKCvf/3rev755zv8nJw8ebLDh9FG0qZNmzRy5EilpaXpBz/4gQKBgO666y653W6lp6dr1qxZamlpicos0sX7dmeniooKVVRUhN4wNNLGjBmjkydPSrr42TkzZ85UWlqavva1ryk5OVn333+/Tp8+HZVZvuj8+fO6/fbbtXr1ah04cEA///nPNXbsWP3Xf/1XVL7+4sWLNXnyZD300EO9HuKSdPjwYd1xxx0aNmyYvv/976ulpUWTJk3Sn/7pnyovL0/Z2dnavXt3VGZpaWlRfn6+Bg0apLS0NE2ZMkXr16/v1X/Q9fbjMHHTRbF0x+JO1bkVK1bolVde0U9/+lO1tLTo008/VWNjo3w+n/7whz/oK1/5iqZNmxaVX56NjY1dOkXD4sWLddNNN6mqqkpLly7Vv/zLv8jj8Wjfvn2hy0Tj/1lLS4u+//3v6+mnn9aOHTt0/vx5jR07Vq2trTp8+LCampo0ePBgLV26NOKzfG7Dhg1avHixysrK9M477+jtt98Onc6dO6f33ntP77zzTlRm+fjjj0PRef/998vpdOrgwYM6ceKEqqqq9Lvf/U4rV66MyiySNHfu3NA/6l577TUNGDBAH330kTZu3Kj33ntPZWVlWrZsWdTm+f3vf6/MzExNmjRJ8+fP12uvvdYr/5iTpPvuu0+jR4/WL3/5S505c0aTJ0/WnXfeqePHj+vTTz9VVlaW7rvvvqjM8uijjyolJUV1dXXyer2aNm2avvvd7+qWW26JWnxeKiYehw26xOFwmE8++cT84z/+oxk6dKiZN2+e2bp1qzl//nzUZ/nzP/9z84Mf/MD87ne/M3/zN39jRo8ebVauXGmMMcbv95s77rjDfPOb34zKLAUFBWbWrFnG6/WavXv3mhUrVhiHw2HGjRtnfvOb30Rlhku53W5z8ODBL73M0KFDozJbVlaWiYuLM3FxccbhcFzxFBcXF/E5jDHG6XSaP/7xj6HzZ8+eNUVFRSY1NdVs2LDBtLW1RWWW//mf/zF/8id/0mEOt9ttdu/eHdrW1NRkUlNTIz7LpX7xi1+YG2+80Tz88MOmtbU1tD0tLc0cPnw4anPExcWZQCBgjDFmwIABpqGhocP6W2+9ZUaMGBG1eVasWGFSU1PNk08+aSoqKszTTz/dYf2TTz4xN9xwQ1RmcTgcxu/3G2OMOXPmjPnZz35mJk2aZAYOHGj+9m//1lRUVJh9+/ZFZRZjjElKSjJNTU3GGGNOnDhh4uLizMmTJ0Pr69evNy6XKyqzpKenm8bGxg7b8vLyzIMPPmiGDBlipk2bZnbu3BmVWYyJjcdh4qaLYumOxZ2qcx6Pxzz88MPm9OnTV1x/+eWXTWJiojl69GjEZzl+/LiZMmWK+dd//deIf62rGTVqlHnllVcu2/7666+bIUOGmAceeCAqcdPS0mLS09ON1+sNbautre1wmRdeeMGMGzcu4rN80WeffWaWLFliRowYYaqqqowx0Y8bh8Nhtm7dak6ePGmys7Mvu++8++67xu12R20eY4z56KOPzNSpU01SUpK59dZbzYkTJ0Jra9euNVOnTo3KHHFxcaHH4Evt37/flJSUmPz8fJOQkBCVWYwxZvjw4aEo37Vrl3E4HKampia0/uyzz5qRI0dGZZZbbrnFvPXWWx225eTkmAMHDphTp06ZsrIyM2jQoKjMYkxsPA4TN10US3cs7lSd++ijj8zIkSPNwIEDzaxZs8wjjzxiHn/8cbNo0SLz1a9+1QwdOtT8+te/jto8zc3NZvr06ebQoUNR+5pX8utf/9q43W6zdu3ay9YOHDhgbr755qg9i7RhwwYzePBgs379+svWioqKTEpKinn99dejMsuVbNu2zYwZM8Z897vfNcnJyVGNm0ceecTk5eWZlJQUk5ycbKZMmRJa27Rpk/nqV79qiouLozbPpdauXWuGDBlikpKSzJ/92Z+ZvLw8k56ebt5///2ofP1L/4HZmc5+mUZCZWWlGT58uLnnnnvMoEGDzIMPPmiGDRtm/u7v/s5873vfM4mJieZHP/pRVGb52c9+ZpKTk83y5cvNT37yE3PHHXeYb33rWx0uc2mURtrVHoeHDBkS8cdhPn6hi+Li4nTixIkv/aj2M2fOKCEhIeKzvPzyy1q1apWmTJmibdu26a//+q+1efNmLViwQJ9++ql+9atfacWKFfrhD38Y8Vl+/vOf67HHHtN9992n4cOH6ze/+Y3Onj2rHTt2hC7j9/u79BH14XL27FlVVVWptrZWgUBATqdTbrdbHo9Ht912m44eParhw4dHbZ4v09jYGLVZDh48qL1792rmzJmXrZ05c0bl5eV69NFHozKL3+9XW1ubMjIyOmx/++239bWvfU3nz5/v1f9HwWBQP/rRj7Rhwwbt2LFD7e3tUZ2nvb1de/bsUX19vQoKCiRJjz/+uL7xjW/o9ttv77XvzcmTJ/Uf//EfOnLkiDIzMzVz5ky1tbVFZZ6XXnpJCxculNPZ+UciRvP+JF28T+3evVvjxo3T2LFjVV1drU2bNun8+fPKy8vTlClTNGLEiKjM8tZbb6myslItLS2aOHGiHn/8caWnp4fWo/29+eLjcL9+/eR2uzV27FjNnDlT8fHxkR0goulkkYqKCnPu3LneHiPkwIED5pVXXgk9vf/ee++ZZcuWmcLCQrNx48aozvLGG2+YRYsWmZkzZ5q///u/N5999llUv/6l9u7da771rW+ZhIQEc8stt5h///d/7/C6qGi9tuTzWaZOnRqaZc2aNb06y6XfF2aJzXli6ef3SvP05vemvr4+Zu5PxsTW9+bzxxqXyxUTPze//OUvzciRI01qaqpZsmSJ8fv9Zv78+SYuLs7Ex8ebmTNnmuPHj0d0BuIGVsnNzTV33323efvtt82aNWtMdna2ufXWW83evXuNMRfv5A6Hg1mYJSbniaVZYm2eWJol1ua5dJbnn3++V2c5fvy4ueGGG8zLL79s9uzZYxYtWmS+8pWvmOnTp5umpiZz9OhRs2jRInPPPfdEdA7iposOHz7cpROz9N4sxsTOUUHM0jdmibV5YmmWWJsnlmaJtXliaZZYOSKSuOmiWDqsl1k6FytHBTFL35gl1uaJpVlibZ5YmiXW5omlWWLliEjipoti6bBeZulcLB0VxCyxP0uszRNLs8TaPLE0S6zNE0uzGBMbR0QSN91w/PjxmDisl1m+3IEDB8zmzZuvuHb69OmoHgrOLLE/S6zNE0uzxNo8sTRLrM0TS7MYc/HQ88/fj+1S27Zti8r7jHEoOAAAsAqfLQUAAKxC3AAAAKsQNwAAwCrEDQAAsApxAyAqGhoa5HA4ur0WjstHej8AYgtxA6DXDR8+XD6fr7fHuKrbb79dFRUVvT0GgKsgbgD0uri4OKWlpfX2GAAsQdwACJtdu3ZpypQpSkpK0tSpU/WHP/yhS9fr7M9DXdlfe3u7Zs+ercWLF3fpa23evFnZ2dkaOHDgZc/C7NixQxMnTlRiYqI8Ho/q6uokSQ8++KAcDoe2b9+uJUuWyOFw6MEHHwxd78MPP9TkyZOVmpqqu+66S36/v0uzAIgM4gZAWAQCAc2YMUN/9Vd/pX379ik3N1cLFy6M+P4KCwvV3t6uF1988ar7/PTTT3XPPfdoxYoVev/99/Xb3/42tHbhwgV9+9vf1ne+8x0dPHhQeXl5KioqkiQ9++yz8vl8mjp1qn7605/K5/Pp2WeflSSdOHFCf/mXf6lZs2bpo48+0qlTp/T444/3+HYDuHbO3h4AgB02b94st9ut4uJiSdKqVas0adKkiO7vn//5n7VmzRo1NDTI6bz6w9nWrVs1atQo3XfffZKkp556SjNnzgyt19bWKjU1VXv27FFra6v+93//V5I0YMAADRgwQE6nU4mJiR3+hLZ582b169dPP/zhD+VwOLRs2TJ973vf6/HtBnDteOYGQFh88sknGjlyZOh8enq67rnnnojub+3atbr77rv1k5/8pEv7PHbsmDIzM0PnR40aFfrvuLg4rV69WhkZGVq6dKn8fr/a29uvus8jR46oublZ6enpSktL03e+8x01NzfrzJkzXZoJQPjxzA2AsMjMzNShQ4dC59va2pSbm6s333xTN954Y1j397mtW7cqISFB48eP12OPPdYhhq5kyJAhOnr0aOh8Y2Nj6L/feecdrVmzRh9//LGGDh2q3/72t9q5c2eH68fFxemLH8c3bNgwffOb39TGjRslScYY+f1+9evXr9u3GUB48MwNgLCYNWuWfD6fSkpK9Mknn+jpp59We3u7hg4dGrH9ZWdna9iwYVq8eLFWrVp11X3+xV/8hfbt26eXXnpJBw4c0JNPPhlaa2trkyT5/X7993//t5YvX35ZyGRnZ+vNN9/UsWPH9Oabb6q9vV2zZs3S4cOH9cEHHyg+Pl4bN27UjBkzLrsugCiK+OeOA7hu/P73vze5ubkmKSnJTJs2zdTX14fWDh06ZDp7yOlsrbP9ffHyx44dM0lJSWbXrl1XnfFXv/qVycrKMjfeeKMpKioK7efcuXOmoKDA3HDDDeaWW24xzzzzjHE6neb//u//QtdtbGw0U6dONS6Xy2RnZ5uzZ88aY4z54IMPzKRJk0xiYqLxeDzm/fffv/o3C0DEOIzhnxcAAMAevOYGgFU6ezPAMWPG6IMPPojuMAB6BXEDwCq7d+++4nZe4AtcP/izFAAAsApHSwEAAKsQNwAAwCrEDQAAsApxAwAArELcAAAAqxA3AADAKsQNAACwCnEDAACs8v9bNHMr3V0NPgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "temp = train[['userID','click_date']].drop_duplicates()\n",
    "user_click_count = temp.click_date.value_counts().sort_index()\n",
    "\n",
    "user_click_count.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb2bc21a",
   "metadata": {},
   "source": [
    "- 每日不同app点击个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "d80554cf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='click_date'>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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2mX+6I/+qFNJ/du//VszduzYiGRxuVzm1KlT5kc/+pEZPny4KSgoMK+88kq//HJljDFf+tKXzF/8xV+Yf//3fzd/+qd/asaOHWtWrVpljDHG7/eb+++/33zhC1+ISJZFixaZ2bNnm/r6enPkyBGzcuVK43K5zPjx4yNWBj/JCe/DUV02nPJE50nePa/Xa06cOPGZ2wwfPjwi2TIzM0MlzOVydTlF6miC2+02//d//xeav3LliikpKTEpKSlm+/btETuy8dZbb5k//MM/7JTD6/Wad999N7SsqanJpKSkWM/ySf/0T/9kRowYYR577DHT0tISWp6amhrRXy5iYmJCRwgHDx5sGhoaOq3fu3evGT16dMTyrFy50qSkpJjvf//7pqqqyvzwhz/stP7UqVPmlltuiUiWTxaxy5cvm5/85CfmrrvuMkOGDDFf//rXTVVVlTl69GhEshhjTGJiYujOoxcvXjQxMTHmww8/DK3ftm2b8Xg8EcmSlpZmGhsbOy3Ly8szy5YtM8OGDTNf/OIXzaFDhyKSxRhnvA9HddlwyhOdJ3n3cnJyzGOPPWYuXbrU5fqtW7eahIQEc/r0aetZzp07Z6ZNm2b+7u/+zvpj3UhWVpZ56aWXrlv+2muvmWHDhpmlS5dGpGycP3/epKWldTqE+unffl544QUzfvx461k+7cKFC6aoqMiMHj3a7NmzxxgT+bLhcrnMK6+8Yj788EOTnZ193Wvn3/7t34zX641YHmOMee+998z06dNNYmKimTJlirl48WJo3caNG8306dMjkiMmJib0HvxJx44dM2VlZWbGjBkmPj4+IlmMMWbUqFGhklxTU2NcLpeprq4OrX/22WfNmDFjIpJl4sSJZu/evZ2WTZ061Rw/fty0tbWZiooKc+utt0YkizHOeB+O2rLhpCc6T/Luvffee2bMmDFmyJAhZvbs2eaJJ54wK1asMIsXLza33367GT58uPnlL38ZsTxnz541M2fO7Pfv+/zyl780Xq/XbNy48bp1x48fN3fccUfEjrJs377dDB061Gzbtu26dSUlJSY5Odm89tprEcnSlX379pnPfe5z5s/+7M9MUlJSRMvGE088YfLy8kxycrJJSkoy06ZNC63buXOnuf32201paWnE8nzSxo0bzbBhw0xiYqL54z/+Y5OXl2fS0tLM22+/HZHH/+QvfN3p7j83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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "temp = train[['appID','click_date']].drop_duplicates()\n",
    "user_click_count = temp.click_date.value_counts().sort_index()\n",
    "user_click_count.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b2ca9e3",
   "metadata": {},
   "source": [
    "- 每日不同app分类点击数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "4127794f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='click_date'>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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ioqKkD9uXfLz882NN95o4uLiTKdOnUxCQoJp166diYyMNLfffrvZsWNHU48Ycjt37jQ33nijadWqlendu7fJy8ur9TypqqoyERERIZnl7bffNt26dTMxMTHm/vvvN36/39x5550mIiLCtGjRwgwdOtSUlZWFZBZjvv7arm9r06aN+e1vf2sWLlwYkll69OhhqqqqjDHG7N+/39x2222mRYsWxuPxGK/Xax588EFz4sSJkMzybadPnzb9+/c3PXv2NCNHjjRpaWmmdevW5v333w/J43s8HtOpUyczfvx4s2/fvpA85oUUFxebm2++2XTu3NlkZWWZsrIyk5qaatq3b29atWplEhMTTUFBQUhmKSsrMzfddJOJiIgwERERJi0tzbz55pvm7NmzIXn8ujT163DYxoabnug8yev39NNPm4yMDLN169bz9u3du9eMGzfOdOzYMSR/me3bt++StlBIS0szI0aMMOvXrzd5eXkmJSXFXHvttWbnzp3GmK9jw+PxWJ+jrKzMtGnTxixevNhs27bNjBkzxnzve98zgwcPNiUlJebgwYPmvvvuMyNHjrQ+yzeGDBliPB6P6dmzp8nKyjJjx44Nbpdddpm56667TFZWVkhm8Xg8xu/3B+caNmyY2bdvn/H7/WbNmjWmZ8+e570JpU2333578B9ZK1asMD/60Y9qRervfvc7071795DM4vF4TGlpqfn1r39t4uPjzfDhw82qVaua5B9Xxhhz6623ml/84hfmb3/7m7nnnntM9+7dzbPPPmuMMcbv95tbbrnF3HDDDSGZZdSoUSY9Pd3s2LHD7Ny500ycONF4PB7Tq1evkMXgudzwOhzWseGWJzpP8vrFxcWZPXv2XPCY+Pj4kMyWlJQUjDCPx1PnFqqzCV6v1/z3v/8N3j516pTJyckxMTEx5q233grZmY2///3v5rrrrqs1R1xcnNmyZUvwvpKSEhMTE2N9lnP94Q9/MJdffrl55JFHTGVlZfD+du3ahfQfFxEREcEzhK1btzbFxcW19q9du9Z069YtZPNMnDjRxMTEmOeff97k5+ebl156qdb+0tJS06ZNm5DMcm6IVVdXmzfeeMP07dvXtG/f3tx3330mPz/f7Nq1KySzGGNMVFRU8J1Hjx07ZiIiIszx48eD+5csWWJ8Pl9IZomNjTX79++vdd+AAQPM+PHjTadOncwPf/hD89lnn4VkFmPc8Toc1rHhlic6T/L6paammkceecScPHmyzv2LFy82kZGR5uDBg9ZnKSsrM/379zevvvqq9ce6mOTkZPPOO++cd/+HH35oOnXqZMaNGxeS2Dhy5IiJjY2tdQr12//6mT9/vunVq5f1Wb7t6NGjJisry3Tr1s2sXLnSGBP62PB4PGbVqlXm+PHjJiUl5byvnb/+9a8mLi4uZPMYY8wXX3xhBg4caKKiosy1115rjh07Ftw3d+5cM3DgwJDMEREREXwNPtfu3bvN1KlTzaBBg0yrVq1CMosxxnTt2jUYyQUFBcbj8ZjNmzcH98+cOdMkJiaGZJbevXubtWvX1rrv+uuvN0VFRebEiRNm+vTppkOHDiGZxRh3vA6HbWy46YnOk7x+X3zxhUlMTDTt27c36enp5tFHHzXZ2dlmzJgxpkePHiY+Pt68++67IZvn8OHDZvDgwU3+8z7vvvuuiYuLM3Pnzj1vX1FRkenZs2fIzrK89dZbpmPHjmbJkiXn7cvJyTHR0dHmww8/DMksdVm3bp258sorzc9//nPTtm3bkMbGo48+agYMGGCio6NN27ZtTf/+/YP7li1bZnr06GFyc3NDNs+55s6dazp16mSioqLMj3/8YzNgwAATGxtrNm7cGJLHP/cffPWp7y83GxYtWmS6du1qRo4caTp06GDGjx9vunTpYp566ilz7733msjISPPCCy+EZJY33njDtG3b1jz55JNm1qxZ5pZbbjE33nhjrWPOjUTbLvY63KlTJ+uvw2H768ojIiJ07NixC741bnV1tVq1amV9lsWLF2vSpEnq37+/1q1bp5/97GdasWKFMjMz9dVXX2n58uWaOHGinnvuOeuz/P73v9fjjz+uBx98UF27dtX777+vU6dOacOGDcFj/H7/Jb0lsFNOnTqllStXauvWraqoqJDX61VcXJxSU1N100036eDBg+ratWvI5rmQ/fv3h2yWPXv2aOfOnRo6dOh5+6qrqzVv3jz96le/Csksfr9fVVVV6ty5c637169fr6uuukpnzpxp0v9HgUBAL7zwgt566y1t2LBBNTU1IZ2npqZG27ZtU2FhoUaNGiVJys7O1g9+8APdfPPNTfa5OX78uP74xz/qwIEDSkhI0NChQ1VVVRWSeRYuXKjRo0fL663/LbZC+fUkff01tWXLFvXq1UtXX321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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "tmp = train[['click_date','appCategory']].drop_duplicates()\n",
    "cate_day_count = tmp.click_date.value_counts().sort_index()\n",
    "cate_day_count.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f7218759",
   "metadata": {},
   "source": [
    "- app分类点击的次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "73c1910d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='appCategory'>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAikAAAHECAYAAAD8obrfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAM/RJREFUeJzt3X18VNWdx/Hv5GkiIZlJCE8mIIGADdBsbRoErCA0iAqJlKUadbWydhUCrkSLEGpcta7ELUTa3RaMhaa0CGXpKhZLkRbE0gVCUFJYKCgQCMFtkxhmwtMYwtk/WOZlDEkmmIdD+Lxfr/vHveeec38z92bmmzt35jqMMUYAAACWCeroAgAAAC6HkAIAAKxESAEAAFYipAAAACsRUgAAgJUIKQAAwEqEFAAAYCVCCgAAsBIhBQAAWKnThJSqqiolJCSotLS0Rf0yMzP1+OOPt01RAADgioV0dAGtobKyUunp6S0OKBs2bNCmTZt08ODBtikMAABcsU5xJiUzM1OZmZkt6nP27FllZWUpLy9Pbre7bQoDAABXrFOElIKCAj3xxBMNlu/cuVM333yzXC6XJk+eLI/H42/7/ve/r7NnzyokJESbNm0S91kEAMAunSKk9O/fv8GykydP6s4779SECRO0Z88enTlzRk899ZQk6dixY8rPz1diYqKOHTum2bNna/LkyQQVAAAs0imuSbmcdevWKTQ0VLm5uXI4HMrOztaDDz4oSSosLFTPnj21ceNGOZ1OPfHEE7rhhhu0ceNG3X777R1cOQAAkDpxSCkvL1dFRYWio6MlSRcuXFBNTY3OnTun48eP6xvf+IacTqckKTIyUgMHDtSRI0c6smQAAPAZnTakxMfH62tf+5pWrVolSTLGyOPxKDQ0VH369NG+ffv86164cEHHjx/XDTfc0FHlAgCAz+kU16RczoQJE3T06FEVFRUpODhYq1at0h133CFjjO655x795je/0a9//WsdP35cOTk58vl8uuWWWzq6bAAA8P867ZkUt9utt956SzNnztTevXs1ZMgQvfXWWwoJCdGNN96oX/3qV3rmmWf0l7/8RQMGDNDatWsVGRnZ0WUDAID/5zB8pQUAAFio037cAwAArm4tCilr165V//79FRISoptvvln79+9vts+WLVuUlJSk2NhY5efnB9wGAACubQF/3HPo0CGlpqZqyZIl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t202xrZAacMLhzHGVFVVmejoaLNv3z7/spKSknrrvPbaa2bw4MFtXosxdh0zQUFB/pDyWR9++KF56aWXzKhRo0x4eHi71mRLiLPtuDHGmDlz5hiXy2Wee+45U1hYaF588cV67cePHzcRERFtXseePXtMQkKC6datm5kwYYKZOXOmeeqpp8xDDz1kBg4caHr27GnefPPNNq/jkr59+/rD4wcffGAcDocpLi72t7/yyiumX79+bVrDNRVSli1bZiIjI82TTz5pFi1aZMaOHWu+/vWv11vn5MmT7VbPoUOHzLp16y7bdvbs2XY9GD/rk08+MVOnTjU33HCDWb9+vTGm/UOKMRffdNLS0vz/4XQU2wKlDS8cl6xcudJ0797dvP766w3aZs+ebaKiosw777zTLrUYY88x89kzKY1p7L/ltmJTiLPtuDHmYkC45ZZbTNeuXc1NN91U773g1VdfNbfccku71OHz+cwbb7xhnn/+efPUU0+ZOXPmmJdfftls2rSp3tmd9rB8+XLTt29fc++995ru3bubadOmmbi4OPPd737XPPjggyYiIsK88MILbVrDNRVSjDFm48aN5qGHHjJ33XWXmTdvnvnkk086uiRrbdq0yQwaNMj8wz/8g4mMjGz3kGITmwKlDS8cn3Xy5En/mZ3P2rRpU7udlrZNYWGhqa2t7egyGrAlxBlj73Hz6quvmh49epiuXbuab3zjG2bkyJEmOjra7Nixo8Nq6kiHDh0ya9as8Z/52rZtm8nOzjaPP/64WbVqVZtv/5q6cPbzPB6Pzpw5o7CwMMXExMjhcHR0Sdbx+Xx64YUXtHLlSm3dulXXX399h9Rh076yoZbDhw/rgw8+0ODBg5WUlKTt27dr9erVOn/+vG655Rbde++97V6TZMdzQy1XH9uen9OnT+vXv/61ysvL1adPH02YMEHR0dEdWpMNOmQ/tXkMskxhYaH5+te/brp162Z69Ohh+vTpY9xut+nSpYvJyMio9znpte7kyZPmxIkTprKy0ly4cKHdt39pX8XExHT4vrKpls9jP1HLleC4aVxHPzc26ej9dE2FlKefftpMnDixwUVaxhhz5MgR89hjj5nu3bubysrKDqjODh19QF5i076yqZZL2E/UciU4bhpny3NjExv20zUVUmJiYszhw4ebXKdnz57mrbfeaqeK7GLDAXmJTfvKplqMYT9Ry5XhuGmcTc+NTWzYT9dUSLHtO+i2seGAvMSmfWVTLcawn6jlynDcNM6m58YmNuyna+rC2b179yo9PV01NTUaPny4EhIS5HQ6VVFRoW3btsnr9erVV1/V3Xff3dGldohhw4YpNTVVCxcuVHh4eIP2X/7yl3rsscf00UcfqXfv3m1ai037au/evcrIyJDX621Qy/bt2+XxeNr1uLFtPzX23Gzbtk0ej0cFBQXttp+aOmbauxabjhnJvuPGlr9vya7nxiY2HMfXVEiRLt6TYf369SopKZHX61VISIhiYmKUmpqqW2+9VSdOnGiXn822UXNvOO39wmHTvmqsluXLl+u9995TTExMu9Qh2bmffvvb3+rPf/6zvF6vjDHq1auXvvzlL2vcuHHt+jPwn99PoaGhiomJ0Ze+9CXdddddHVpLRx4zkp3HjS1/37Y9Nzbp6OP4mgopBw4c0He+8x0VFxcrMTFRWVlZevTRR/0vXKdPn273++XY5vNvOJ994Rg1alS7vcjbtK8au6eRMUYzZsxo13saXWLLfho0aJA++OADRUREqKysTI899pjeeecdXbhwQcHBwZo6dap++MMf6rrrrmvzWlavXq05c+aourpakydP1qJFi/Twww9r7dq1cjgcGj9+vJYvX65u3bq1eS02HjOSPceNTX/fl9jy3NjEhuP4mgoptt0oDo2zaV/deeed2rBhg770pS9p+PDh9e5O/frrrysjI0ORkZFatmxZm9dim6CgIJ08eVJRUVG66667FBoaqn//93+X2+1WUVGR/vmf/1l33HGH8vPz27SOQG5aN3fuXPl8vna5aR3HTNNs+vtG46w4jtvsahcL2XajONvYcgMyY+zbV7bc08gYu/ZTUFCQ8Xq9xhhjrrvuOlNaWlqv/Q9/+IO54YYb2rwOG29aZ9MxY4xdx41tf982PTe26ejj+JoKKbbdKM42ttyAzBg795Ut9zSyaT85HA7zu9/9zpw+fdokJiY2uIv4e++9Z2JiYtq8DhtvWmeMPceMMXYdN7b9fdv03NioI4/jayqk2HajONvYdAMym/dVR9/TyKb9NHPmTDNy5EgTFRVlIiMjzYgRI/xtq1evNgMHDjTz5s1rl1psvGndJR19zBhj13Fj29+3Tc+NzTriOL6mQooxdt0ozkY23YDM5n117tw5M2/ePJOQkGDKy8vbffs2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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cate_count = train.appCategory.value_counts()\n",
    "cate_count.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "213e3bf6",
   "metadata": {},
   "source": [
    "## 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "9a5d6d4e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理user 数据集\n",
    "user = pd.read_csv('./data/user.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "7957fbbe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>userID</th>\n",
       "      <th>age</th>\n",
       "      <th>gender</th>\n",
       "      <th>education</th>\n",
       "      <th>marriageStatus</th>\n",
       "      <th>haveBaby</th>\n",
       "      <th>hometown</th>\n",
       "      <th>residence</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>42</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>512</td>\n",
       "      <td>503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1403</td>\n",
       "      <td>1403</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>21</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>607</td>\n",
       "      <td>607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>22</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1301</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   userID  age  gender  education  marriageStatus  haveBaby  hometown  \\\n",
       "0       1   42       1          0               2         0       512   \n",
       "1       2   18       1          5               1         0      1403   \n",
       "2       3    0       2          4               0         0         0   \n",
       "3       4   21       2          5               3         0       607   \n",
       "4       5   22       2          0               0         0         0   \n",
       "\n",
       "   residence  \n",
       "0        503  \n",
       "1       1403  \n",
       "2          0  \n",
       "3        607  \n",
       "4       1301  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "9633ded7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2805118 entries, 0 to 2805117\n",
      "Data columns (total 8 columns):\n",
      " #   Column          Dtype\n",
      "---  ------          -----\n",
      " 0   userID          int64\n",
      " 1   age             int64\n",
      " 2   gender          int64\n",
      " 3   education       int64\n",
      " 4   marriageStatus  int64\n",
      " 5   haveBaby        int64\n",
      " 6   hometown        int64\n",
      " 7   residence       int64\n",
      "dtypes: int64(8)\n",
      "memory usage: 171.2 MB\n"
     ]
    }
   ],
   "source": [
    "user.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "dd7a97af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>appID</th>\n",
       "      <th>appCategory</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25</td>\n",
       "      <td>203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>68</td>\n",
       "      <td>104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>75</td>\n",
       "      <td>402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>83</td>\n",
       "      <td>203</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   appID  appCategory\n",
       "0     14            2\n",
       "1     25          203\n",
       "2     68          104\n",
       "3     75          402\n",
       "4     83          203"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "categories.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "07da40fc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='age'>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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IINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIINSBQAAAAAAIEOLSpX77rsvhg4dGuXl5XHiiSfGqlWrIiJi2rRpUVZW1nQZPnx4021WrFgRNTU10b9//5gxY0aklEo6BgAAAAAAUArZpcrq1atjypQpMWfOnFi7dm0MHjw4Lr/88oiIePrpp2PhwoWxcePG2LhxYyxbtiwiIhobG2Py5Mlx/PHHx9KlS2PlypVRW1tbsjEAAAAAAIBSKUuZ2zzuv//+eO2112Lq1KkREfHII4/E6aefHlu2bImqqqpYt25d9O7du9lt7r333rj00kvjtddei549e8by5cvj29/+djzxxBMlGcvV0NAQlZWVUSgUom/fvk3XD5m5cI+3rZ8zKfv7AAAAAAAAnd/ueoOdlecGnnnmmc2+fuGFF2L48OHx3HPPRUopRo8eHWvXro1TTjkl5s2bF4cffngsX748xowZEz179oyIiFGjRsXKlSsjIkoytjuNjY3R2NjY7MEBAAAAAABoiVZ9UP0777wTP/rRj+LKK6+MVatWxdFHHx0LFiyIlStXxn777RdXXHFFRLxfXlRXVzfdrqysLLp37x4bN24sydjuzJ49OyorK5sugwYNas3dBgAAAAAAurDsnSo7uummm6J3797xzW9+M/bbb7+46KKLmsZ+/vOfx9ChQ6OhoSHKy8ujoqKi2W179OgRW7duLclY//79dznf66+/PqZPn970dUNDg2IFAAAAAABokRbvVHnooYfitttuizvvvDP222+/D43369cv3nvvvXj99dejqqoq3njjjWbjmzZtiv33378kY7tTUVERffv2bXYBAAAAAABoiRaVKi+99FJcdNFF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jn3ek1LnXP9dYe2nZP3vK+f+lKx/5/5d66zrvz02UChVUko1NTXpyiuv3O2rwu+4447Us2fPtG7duqy86urqpj/4lZWV7fKS88fgoUOHpnvuuedD1z/44IPp4IMPTldccUVWzoYNG1L//v2b/WF850X1i1/8Io0cOTLj3v3/3nzzzTRlypQ0ePDgtGjRopRSy0uVsrKy9MADD6QtW7ak4cOHf6gMeOyxx1JVVVWL5vUf//Ef6aSTTkq9e/dOxx13XHrrrbeaxubOnZtOOumkrJxu3bo1nQB39OKLL6ZZs2al8ePHpx49emRlHX744U0l1rJly1JZWVlaunRp0/g//dM/pSFDhmRlHXPMMenhhx9udt3xxx+fVq9enbZu3ZrmzJmTDjrooKyslPwn60nm7ue1rz/JLGahXqzzfkoK9ZRaVqh3hTI9peIW6tZ+x639lKz/lDruxSTWvrW/K11h7adUvPVfzLWfUtdY/9Z+xz7vSalzrv+usPZTsv5T2jfO/SlZ/879u9ZZ13+xN1DsilIlvf9H+Orq6nTggQemSZMmpauuuipde+216eKLL05HHHFEOuSQQ9K9996bnbd+/fo0duzY9LOf/axN87r33ntTVVVVmjt37ofGVq9enUaMGJF9wlqwYEEaMGBAuvPOOz80NmPGjNS3b9/04IMPtmqeixcvTkceeWT66le/mvr06dOik8xVV12Vxo0bl/r27Zv69OmTxo4d2zR29913pyOOOCLdcMMNrZrX3Llz08EHH5x69+6dPvvZz6Zx48al/v37p6eeeirr9jueaHYn9+2Z6urq0uGHH57OP//8NGDAgDR16tR02GGHpe985zvpa1/7WurVq1e6+eabs7J+9atfpT59+qTp06enn/zkJ+m0005Ln/70p5sds2ORtCf+k/Ukc1e6wpPMYhbqxTrvp6RQT6nlhfq+XqanVNxC3drvuLWfkvWfUse9mMTat/Z3pSus/ZSKt/6LufZT6hrr39rv2Oc9KXXO9d8V1n5K1n9K+8a5PyXr37l/1zrr+i/2BopdUar8P42Njem///f/nv7u7/4uXXvttem6665L//AP/5AWL17cqldmr1+/Pk2YMKHNn0mwevXqdP/99+9ybNu2bS0qe956662mP2zuaPHixW1aRCm9/0fXG264IVVXV6e1a9e2+PbvvvtueuaZZ9JvfvObpuumT5+e6urq2jSvzZs3p/nz56dZs2alO+64I7355pvZt62trU1/+ctf2vT9d7R69ep0zz33NJ3s//CHP6RrrrkmTZs2Ld11110tynrooYfSxRdfnCZOnJhuuOGGFt2vnflP1pPMXekKTzL/4z/+Iw0ZMqRohfobb7xRlPO+Qv39Qv36669v8Zw6a5l+0EEHfahM79mzZ3aZntKHC/VTTz211YX6ntb+wQcfbO1/hLas/ZRK94KSndf/2LFjU79+/TrN+h84cGD6zne+k7761a+2aP3v6sUkO/9f1pK1v7sXUh155JGd8rz/0ksvdam1vy+d+z94IVWx1n5bzvsp7fmFhC059xdr7afUNc797Xne3xfWfkq7Xv+tPfenVNwX0hbrbz3O/Sn927/92z577m/t8/5in/tXrFhR1BeRe96fv/6nTZvWLuf+jlz7Kb3/N8NivYj817/+ddFeRF7M5z27U5ZSsT7yHtgbrVixIs4666xoaGiIMWPGRHV1dVRUVMQbb7wRf/jDH6KhoSHmzp0bZ599dlbehg0b4oILLohf/OIXMWTIkFbP67777otLL700Zs+eHd/85jebjb300ktx5plnxgsvvBDbt2/fY9Zdd90VV199dfz0pz+Nr3zlK83Gvvvd78bcuXPjnnvuic997nMtnucjjzwSU6dOjRNOOCHuu+++WLFiRRx++OHZt582bVo888wzsWLFikgpxTHHHBNPPvlkRET827/9W9x4443xX/7Lf4kf/vCHLZrXvHnz4m//9m9j69atceKJJ8a2bdti1apV8cADD8QJJ5ywx9t369Yt3nrrrejbt+9uj3n77bejR48ee8y644474qabboqxY8fG4sWL40tf+lLcf//9ccEFF8T//b//N/793/89rrvuuvjbv/3bPWb9+te/jr/+67+Ob3zjG3H44YfH7373u3jnnXfi8ccfbzqmUChEZWXlHrMiIt55551YtGhRLF++PBoaGqK8vDyqqqqipqYmTj755Fi3bl2Lfp4f5dVXX83Oeumll+L555+PiRMnfmjs7bffjnnz5sXVV1+dlVUoFGLz5s0xcODAZtc/8sgj8Vd/9Vfx7rvvtvo+NjY2xs033xwLFiyIxx9/PLZv396irO3bt8dzzz0Xq1atigsvvDAiIq699to49thj4zOf+Uyr5rVly5b4b//tv8XatWtj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n6Zhw4a1W05XyerMc+sKWSm9/2/ptddeSz/84Q/TIYccks4555z0+9//vlUvnt1V1gMPPCCrg7I6w8+x2HkfZM2aNavNWZ/73OfSZZddlp544on0la98JQ0bNizddNNNKaWUCoVCOvXUU9OnPvWpFufuSKkCXdwrr7ySdZFV/KzOPLeukFVeXp7+/Oc/N339zjvvpBkzZqTKysq0YMGCFr3yX5asUmYVM+/JJ59Mn/zkJ5vlVFVVNX3uUUrvv8K0srJSVpGzOvPcukLWB/71X/81HXrooenKK69MmzZtarq+NZ+LJqvlryDsrHPrClndunVLDQ0NKaWUDjjggFRfX99s/OGHH06DBw9ut5wd8z7443lb84o5t66QVVZWVtR5FevnWIq86667LlVWVqbvf//7qba2Nv393/99s/HXXnst9erVq91yukpWZ55bZ8/63ve+V5THf8eC8u2330633357OuGEE9KBBx6Yvv71r6fa2tr0wgsvtCrrV7/6lawunlXqubVlvfbu3bvp3Wreeuut1K1bt7Rly5am8TvvvDNVVFRk389dUapAF1ddXd30dhxlZWW7vOT+4U9Wy7I689y6QtbQoUPTPffc86HrH3zwwXTwwQenK664QpasTpFVzLwNGzak/v37N70VX0opLV++vNkxv/jFL9LIkSNlFTmrM8+tK2Tt6M0330xTpkxJgwcPTosWLUoptb4kkNVynXVu+3pWWVlZeuCBB9KWLVvS8OHD09NPP91s/LHHHktVVVXtllOKPFn7RlYp8lJ6/0OLTzrppNS7d+903HHHNfuw47lz56aTTjqpXXO6SlZnnltXyNqxoNzRiy++mGbNmpXGjx+fevToIUtWq7I689wOP/zwphdiLVu2LJWVlaWlS5c2jf/TP/1TGjJkSFbW7ihVoItbv359Gjt2bPrZz34mq52zip0nq2XuvffeVFVVlebOnfuhsdWrV6cRI0Zk/9FblqxSZhU7b8GCBWnAgAHpzjvv/NDYjBkzUt++fdODDz4oqwRZnXluXSFrZ4sXL05HHnlk+upXv5r69OnT6pJAVsfnydqzq666Ko0bNy717ds39enTJ40dO7Zp7O67705HHHFEuuGGG9otpxR5svaNrFLk7Wju3Lnp4IMPTr17906f/exn07hx41L//v3TU0891SE5XSWrM89tX87a8ZX/u7Nt2zZZslqV1ZnnVldXlw4//PB0/vnnpwEDBqSpU6emww47LH3nO99JX/va11KvXr3SzTffnJW1O0oVIK1fvz5NmDCh6b07ZbVfVrHzZLXM6tWr0/3337/LsW3btqV7771XlqxOkVXsvLfeeqtpO/SOFi9enNatW9eieclqWVZnnltXyNrZ22+/nW644YZUXV2d1q5dK6sdszrz3PblrHfffTc988wz6Te/+U3TddOnT091dXUdklOKPFn7RlYp8j6wefPmNH/+/DRr1qx0xx13pDfffLNDc7pKVmee276aVVtbm/7yl7+0+vvLktWeecWe2+rVq9M999zTtOv9D3/4Q7rmmmvStGnT0l133dXm/LKUUgoAAAAAAAA+UreOngAAAAAAAMDeQKkCAAAAAACQQakCAAAAAACQQakCAAAAAACQQakCAAAAAACQQakCAAAAAACQQakCAADssx5//PEYPXp09OzZM2pqamLFihUREfHcc8/FMcccEwcddFBMnz49jjrqqPiv//W/RkTEAw88EJ/4xCeiX79+cfnll0djY2NH3gUAAKATKUsppY6eBAAAQLG999578bGPfSyuvvrquOyyy2L27Nnxpz/9KRYtWhTjxo2LyZMnx6RJk+Lkk0+OBx54II466qh48803Y+TIkXHrrbfGKaecEl/+8pfjS1/6Utx0000dfXcAAIBOwE4VAABgn7V8+fKYPn16vPLKK7Fp06b405/+FBERzz77bHzpS1+KUaNGxciRI6O+vj769+8fCxYsiOOOOy4uvfTSGDZsWEydOjV+97vfdfC9AAAAOovyjp4AAABAKXTr1i1uueWW+OUvfxlDhw6NwYMHx/bt2yMiYvjw4fGHP/whDjrooHjxxRdj5MiRERGxdu3aeOaZZ6Jfv34REfHuu+9G7969O+ouAAAAnYydKgAAwD7pf//v/x233nprrFq1KpYuXRqXXXZZ09jRRx8dV199dRx66KFx8cUXx7HHHhsREYcddlicddZZ8eyzz8azzz4by5cvj4ceeqij7gIAANDJ2KkCAADskzZv3hwREYVCIf7zP/8zpk+fHimleOmll+Kxxx6L//N//k9UVlbGoEGDmm7zla98JX72s5/Fiy++GEcccUT89Kc/jSeffDKWLl3aUXcDAADoROxUAQAA9kmnn356nHXWWfHJT34ypk6dGt/4xjdi3bp10atXrzjkkEPilFNOierq6jjggANi6tSpERExdOjQmD9/fkyfPj2OPvroWLFiRSxYsKCD7wkAANBZlKWUUkdPAgAAoL3cfvvtcffdd8cvf/nL6NmzZyxfvjwmTpwYf/7zn6Nv374dPT0AAKAT8/ZfAABAl3LaaafFnXfeGcccc0xs27Ytqqur48c//rFCBQAA2CM7VQAAAAAAADL4TBUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAMShUAAAAAAIAM/x/qWGzp6SJocwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 2000x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 查看age特征\n",
    "user.age.value_counts().sort_index().plot(kind='bar',figsize=(20,8))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "69352bc7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义特征处理函数\n",
    "\n",
    "def age_process(age):\n",
    "    '''对age列离散化'''\n",
    "    age = int(age)\n",
    "    if age==0:\n",
    "        return 0\n",
    "    elif age<15:\n",
    "        return 1\n",
    "    elif age<25:\n",
    "        return 2\n",
    "    elif age<28:\n",
    "        return 3\n",
    "    else:\n",
    "        return 4\n",
    "\n",
    "def province_process(hometown):\n",
    "    '''获得hometown的province'''\n",
    "    hometown = str(hometown)\n",
    "    return int(hometown[:2])\n",
    "\n",
    "def city_process(hometown):\n",
    "    '''获得hometown的city'''\n",
    "    hometown = str(hometown)\n",
    "    if len(hometown)>1:\n",
    "        return hometown[2:]\n",
    "    else:\n",
    "        return 0\n",
    "    \n",
    "def cate_first_process(cate):\n",
    "    '''获取app分类一级类目'''\n",
    "    cate = str(cate)\n",
    "    if len(cate)<3:\n",
    "        return 0\n",
    "    else:\n",
    "        return int(cate[1:])\n",
    "\n",
    "def cate_second_process(cate):\n",
    "    '''获取app分类二级类目'''\n",
    "    cate = str(cate)\n",
    "    if len(cate) < 3:\n",
    "        return 0\n",
    "    else:\n",
    "        return int(cate[1:])\n",
    "\n",
    "def get_day(arg):\n",
    "    '''获取clicktime 的天'''\n",
    "    return int(str(arg)[:2])\n",
    "\n",
    "def get_hour(arg):\n",
    "    '''离散化clicktime 的小时'''\n",
    "    hour = int(str(arg)[2:4])\n",
    "    if hour<6:\n",
    "        return 0\n",
    "    elif hour<12:\n",
    "        return 1\n",
    "    elif hour <18:\n",
    "        return 2\n",
    "    else:\n",
    "        return 3\n",
    "\n",
    "# 文件较多-定义打开文件的方法\n",
    "def read_csv_file(f,log=False):\n",
    "    '''文件打开方法'''\n",
    "    data = pd.read_csv(f)\n",
    "    if log:\n",
    "        print(data.head())\n",
    "        print(data.info())\n",
    "        print(data.describe())\n",
    "    return data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "474629d6",
   "metadata": {},
   "source": [
    "### 特征处理过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "a480168c",
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_csv('./data/train.csv')\n",
    "test = pd.read_csv('./data/test.csv')\n",
    "cate = pd.read_csv('./data/app_categories.csv')\n",
    "ad = pd.read_csv('./data/ad.csv')\n",
    "user = pd.read_csv('./data/user.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "bc76e0ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>appID</th>\n",
       "      <th>appCategory</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25</td>\n",
       "      <td>203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>68</td>\n",
       "      <td>104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>75</td>\n",
       "      <td>402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>83</td>\n",
       "      <td>203</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   appID  appCategory\n",
       "0     14            2\n",
       "1     25          203\n",
       "2     68          104\n",
       "3     75          402\n",
       "4     83          203"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cate.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "3e550f69",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理 appCategory 特征\n",
    "cate['app_cate_first'] = cate['appCategory'].apply(cate_first_process)\n",
    "cate['app_cate_second'] = cate['appCategory'].apply(cate_second_process)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "68493be4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理 user 数据集特征\n",
    "user['age_process'] = user['age'].apply(age_process)\n",
    "user['hometown_province'] = user['hometown'].apply(province_process)\n",
    "user['hometown_city'] = user['hometown'].apply(city_process)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "d1eb167a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 处理 训练集 与 测试集 特征列\n",
    "train['clickTime_day'] = train['clickTime'].apply(get_day)\n",
    "train['clickTime_hour'] = train['clickTime'].apply(get_hour)\n",
    "\n",
    "test['clickTime_day'] = test['clickTime'].apply(get_day)\n",
    "test['clickTime_hour'] = test['clickTime'].apply(get_hour)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78632089",
   "metadata": {},
   "source": [
    "数据拼接"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "819512ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>clickTime</th>\n",
       "      <th>conversionTime</th>\n",
       "      <th>creativeID</th>\n",
       "      <th>userID</th>\n",
       "      <th>positionID</th>\n",
       "      <th>connectionType</th>\n",
       "      <th>telecomsOperator</th>\n",
       "      <th>clickTime_day</th>\n",
       "      <th>clickTime_hour</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3089</td>\n",
       "      <td>2798058</td>\n",
       "      <td>293</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1259</td>\n",
       "      <td>463234</td>\n",
       "      <td>6161</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>4465</td>\n",
       "      <td>1857485</td>\n",
       "      <td>7434</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1004</td>\n",
       "      <td>2038823</td>\n",
       "      <td>977</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>170000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1887</td>\n",
       "      <td>2015141</td>\n",
       "      <td>3688</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>17</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   label  clickTime  conversionTime  creativeID   userID  positionID  \\\n",
       "0      0     170000             NaN        3089  2798058         293   \n",
       "1      0     170000             NaN        1259   463234        6161   \n",
       "2      0     170000             NaN        4465  1857485        7434   \n",
       "3      0     170000             NaN        1004  2038823         977   \n",
       "4      0     170000             NaN        1887  2015141        3688   \n",
       "\n",
       "   connectionType  telecomsOperator  clickTime_day  clickTime_hour  \n",
       "0               1                 1             17               0  \n",
       "1               1                 2             17               0  \n",
       "2               4                 1             17               0  \n",
       "3               1                 1             17               0  \n",
       "4               1                 1             17               0  "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "d9eab3f7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>creativeID</th>\n",
       "      <th>adID</th>\n",
       "      <th>camgaignID</th>\n",
       "      <th>advertiserID</th>\n",
       "      <th>appID</th>\n",
       "      <th>appPlatform</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4079</td>\n",
       "      <td>2318</td>\n",
       "      <td>147</td>\n",
       "      <td>80</td>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4565</td>\n",
       "      <td>3593</td>\n",
       "      <td>632</td>\n",
       "      <td>3</td>\n",
       "      <td>465</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3170</td>\n",
       "      <td>1593</td>\n",
       "      <td>205</td>\n",
       "      <td>54</td>\n",
       "      <td>389</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>6566</td>\n",
       "      <td>2390</td>\n",
       "      <td>205</td>\n",
       "      <td>54</td>\n",
       "      <td>389</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5187</td>\n",
       "      <td>411</td>\n",
       "      <td>564</td>\n",
       "      <td>3</td>\n",
       "      <td>465</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   creativeID  adID  camgaignID  advertiserID  appID  appPlatform\n",
       "0        4079  2318         147            80     14            2\n",
       "1        4565  3593         632             3    465            1\n",
       "2        3170  1593         205            54    389            1\n",
       "3        6566  2390         205            54    389            1\n",
       "4        5187   411         564             3    465            1"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ad.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "be65a041",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>appID</th>\n",
       "      <th>appCategory</th>\n",
       "      <th>app_cate_first</th>\n",
       "      <th>app_cate_second</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25</td>\n",
       "      <td>203</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>68</td>\n",
       "      <td>104</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>75</td>\n",
       "      <td>402</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>83</td>\n",
       "      <td>203</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   appID  appCategory  app_cate_first  app_cate_second\n",
       "0     14            2               0                0\n",
       "1     25          203               3                3\n",
       "2     68          104               4                4\n",
       "3     75          402               2                2\n",
       "4     83          203               3                3"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cate.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "6cfdbc2b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['label', 'clickTime', 'conversionTime', 'creativeID', 'userID',\n",
       "       'positionID', 'connectionType', 'telecomsOperator', 'clickTime_day',\n",
       "       'clickTime_hour', 'adID', 'camgaignID', 'advertiserID', 'appID',\n",
       "       'appPlatform', 'appCategory', 'app_cate_first', 'app_cate_second',\n",
       "       'age', 'gender', 'education', 'marriageStatus', 'haveBaby', 'hometown',\n",
       "       'residence', 'age_process', 'hometown_province', 'hometown_city'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_ad = pd.merge(train,ad, on='creativeID')\n",
    "train_ad_cate = pd.merge(train_ad,cate,on='appID')\n",
    "train_ad_cate_user = pd.merge(train_ad_cate,user,on='userID')\n",
    "train_ad_cate_user.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "e8f30e17",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['instanceID', 'label', 'clickTime', 'creativeID', 'userID',\n",
       "       'positionID', 'connectionType', 'telecomsOperator', 'clickTime_day',\n",
       "       'clickTime_hour', 'adID', 'camgaignID', 'advertiserID', 'appID',\n",
       "       'appPlatform', 'appCategory', 'app_cate_first', 'app_cate_second',\n",
       "       'age', 'gender', 'education', 'marriageStatus', 'haveBaby', 'hometown',\n",
       "       'residence', 'age_process', 'hometown_province', 'hometown_city'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_ad = pd.merge(test,ad,on='creativeID')\n",
    "test_ad_cate = pd.merge(test_ad,cate,on='appID')\n",
    "test_ad_cate_user = pd.merge(test_ad_cate,user,on='userID')\n",
    "test_ad_cate_user.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "28e56e66",
   "metadata": {},
   "source": [
    "### 特征筛选"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "e3287b25",
   "metadata": {},
   "outputs": [],
   "source": [
    "columns = list(set(train_ad_cate_user.columns) & set(test_ad_cate_user.columns))\n",
    "\n",
    "columns.remove('label')\n",
    "columns.remove('hometown')\n",
    "columns.remove('clickTime')\n",
    "columns.remove('appCategory')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "871aa6bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = train_ad_cate_user[columns]\n",
    "y_train = train_ad_cate_user['label']\n",
    "\n",
    "x_test = test_ad_cate_user[columns]\n",
    "y_test = test_ad_cate_user['label']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3bd133ef",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "cdb736b5",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "d7e14ba6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestRegressor(max_depth=7, n_estimators=20, n_jobs=-1, random_state=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestRegressor</label><div class=\"sk-toggleable__content\"><pre>RandomForestRegressor(max_depth=7, n_estimators=20, n_jobs=-1, random_state=1)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestRegressor(max_depth=7, n_estimators=20, n_jobs=-1, random_state=1)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rf = RandomForestRegressor(\n",
    "    n_estimators=20,\n",
    "    max_depth=7,\n",
    "    n_jobs = -1,\n",
    "    random_state = 1\n",
    "    )\n",
    "rf.fit(x_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "d29b7d95",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.00156587, 0.00182488, 0.0073175 , ..., 0.02068106, 0.02068106,\n",
       "       0.00262448])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 预测\n",
    "pred =rf.predict(x_test)\n",
    "pred"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ca6bbda",
   "metadata": {},
   "source": [
    "获取特征重要性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "41aaf0e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "importances = rf.feature_importances_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "afa75543",
   "metadata": {},
   "outputs": [],
   "source": [
    "indices = np.argsort(rf.feature_importances_)[::-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "146675d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([12,  1, 16, 11,  4,  5,  3, 22,  0,  2, 18, 13, 21,  7,  8, 14,  6,\n",
       "       19, 15,  9, 10, 20, 17], dtype=int64)"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "indices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "id": "f152008e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['advertiserID',\n",
       " 'app_cate_second',\n",
       " 'app_cate_first',\n",
       " 'appID',\n",
       " 'positionID',\n",
       " 'connectionType',\n",
       " 'camgaignID',\n",
       " 'adID',\n",
       " 'creativeID',\n",
       " 'clickTime_day',\n",
       " 'gender',\n",
       " 'age',\n",
       " 'userID',\n",
       " 'residence',\n",
       " 'hometown_province',\n",
       " 'education',\n",
       " 'appPlatform',\n",
       " 'hometown_city',\n",
       " 'haveBaby',\n",
       " 'telecomsOperator',\n",
       " 'marriageStatus',\n",
       " 'age_process',\n",
       " 'clickTime_hour']"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 显示重要性特征\n",
    "sorted_columns = [columns[i] for i in indices]\n",
    "sorted_columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "55584df5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<BarContainer object of 23 artists>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.barh(y=sorted_columns,width=importances[indices])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b70133d",
   "metadata": {},
   "source": [
    "### 算法调参"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "id": "c70cd7da",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.ensemble import RandomForestRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a82e9bff",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 参数候选集\n",
    "param_grid = {\n",
    "    'n_estimators':[10,100,500,1000],\n",
    "    'max_features':[0.6,0.7,0.8,0.9],\n",
    "    'max_depth':[5,6,7,8]\n",
    "}\n",
    "\n",
    "rf = RandomForestRegressor()\n",
    "gs = GridSearchCV(rf,param_grid)\n",
    "\n",
    "gs.fit(x_train,y_train)\n",
    "\n",
    "# 最优参数 与 最优分数 展示\n",
    "display(gs.best_params_)\n",
    "\n",
    "display(gs.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "76eff998",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "data_ana_project_env",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
